﻿using SkiaAndModel.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SkiaAndModel.NodeAbstract
{
    public class ElementNodeBase : INode
    {

        public Guid Id { get; set; } = Guid.NewGuid();
        public virtual string Name { get; set; } = "Element Node";
        public NodeType NodeType { get; set; } = NodeType.ElementNode;

        /// <summary>
        /// 下一个节点，一般就是路径节点了（应该给一个PathNodeBase类型），但是这里为了保持可扩展性，这里使用接口类
        /// </summary>
        public PathNodeBase NextPathNode { get; set; } = new PathNode();

        /// <summary>
        /// 输入触点列表，暂时考虑到，输入输出类型就是一个点的值或者？？ 但是这个值还是需要使用PathNode类型进行连接，还是留一个todo吧
        /// todo：确定输入输出的类型
        /// </summary>
        // ITreeNode[] InputArray { get; set; }
        public ObservableCollection<INode> InputList { get; set; } = new ObservableCollection<INode> { new PathNode() };

        /// <summary>
        /// 输出触点列表
        /// </summary>
        //ITreeNode[] OutputArray { get; set; }
        public ObservableCollection<INode> OutputList { get; set; } = new ObservableCollection<INode> { new PathNode() };
        public ElementNodeBase()
        {
            this.NextPathNode.From = this;
        }


        public int GetHeight()
        {
            return 0;
        }


        /// <summary>
        /// 这个值指向真正的元器件元素信息，同时这个元器件一定要是ElementNodeBase 类型的,然后如果有其他信息，在子类里补充就完事了
        /// </summary>
        // public ElementNodeBase ElementInfo;
    }
}
